/**
 * ClassReflection.java
 * Copyright (C) 2009 Jose Mauro da Silva Sandy
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

package utils;

import java.lang.reflect.*;
import java.util.ArrayList;

/**
 *
 * @author jmsandy
 */
public class ClassReflection {

    public ClassReflection(){

    }

    /**
     * Recupera uma dada descricao para uma classe de dominio
     * @param index - indice a ser procurado
     * @param cls - classe a ser procurada
     * @return a string a ser procurada
     */
    public static String getName(int index, Class cls){
        String strRet = "";

        try {
            // Recupera todos os atributos da classe
            Field fieldlist[] = cls.getDeclaredFields();

            // Verifica se existe o item
            if(fieldlist.length >= index){
                Field fld = fieldlist[index - 1];
                strRet = fld.getName();
            }
        }
        catch (Throwable ex) {
            Log.gravarLog(ex.getMessage(), new ClassReflection());
            strRet = "";
        }
        return strRet;
    }

    /**
     * Recupera uma lista contendo todas as instancias de dominio de uma
     * dada classe.
     * @param cls - classe a ser procurada
     * @return uma lista com todas as instancias de dominio
     */
    public static ArrayList<String> getLstValues(Class cls){
        ArrayList<String> lstRet = new ArrayList<String>();

        try {
            // Recupera todos os atributos da classe
            Field fieldlist[] = cls.getDeclaredFields();

            for(Field fld : fieldlist){
                lstRet.add(fld.getName());
            }
        }
        catch (Throwable ex) {
            Log.gravarLog(ex.getMessage(), new ClassReflection());
            lstRet = null;
        }
        return lstRet;
    }
}
